from enum import StrEnum

__all__ = ["ValueMode", "ValueUnit", "ValueSize", "ValueTime", "DecimalMode"]



class ValueMode(StrEnum):
    """
    Determines whether a channel value is an absolute value or a counter.
    """

    ABSOLUTE: str = "Absolute"
    DIFFERENCE: str = "Difference"


class ValueUnit(StrEnum):
    """
    Volume / time unit of a channel value.

    PRTG uses this unit for volume and time conversion.

    Note that 'CPU' is a percentage unit that is accounted to the CPU load in
    index graphs.
    """

    BYTESBANDWIDTH: str = "BytesBandwidth"
    BYTESDISK: str = "BytesDisk"
    TEMPERATURE: str = "Temperature"
    PERCENT: str = "Percent"
    TIMERESPONSE: str = "TimeResponse"
    TIMESECONDS: str = "TimeSeconds"
    CUSTOM: str = "Custom"
    COUNT: str = "Count"
    CPU: str = "CPU"
    BYTESFILE: str = "BytesFile"
    SPEEDDISK: str = "SpeedDisk"
    SPEEDNET: str = "SpeedNet"
    TIMEHOURS: str = "TimeHours"


class ValueSize(StrEnum):
    """
    Size unit used for a channel value.
    """

    ONE: str = "One"
    KILO: str = "Kilo"
    MEGA: str = "Mega"
    GIGA: str = "Giga"
    TERA: str = "Tera"
    BYTE: str = "Byte"
    KILOBYTE: str = "KiloByte"
    MEGABYTE: str = "MegaByte"
    GIGABYTE: str = "GigaByte"
    TERABYTE: str = "TeraByte"
    BIT: str = "Bit"
    KILOBIT: str = "KiloBit"
    MEGABIT: str = "MegaBit"
    GIGABIT: str = "GigaBit"
    TERABIT: str = "TeraBit"


class ValueTime(StrEnum):
    """
    Interval time unit used for a channel value.
    """

    SECOND: str = "Second"
    MINUTE: str = "Minute"
    HOUR: str = "Hour"
    DAY: str = "Day"


class DecimalMode(StrEnum):
    """
    Initial value for the Decimal Places option for a channel value.

    Use AUTO for integer values, and "ALL" for float values.
    """

    AUTO: str = "Auto"
    ALL: str = "All"
